home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / telecom / 86 / pascal / cursor.pas < prev    next >
Pascal/Delphi Source File  |  1986-12-19  |  4KB  |  145 lines

  1. { CURSOR.PAS - A collection of cursor movement and control routines for TOS
  2.     programs.  These routines provide access to the VT52 escape sequences, as
  3.     well as providing more compatibility with Turbo Pascal.  Include this file
  4.     along with your program in order to use the routines.  Alternatively, you
  5.     can make this a separate module.
  6. }
  7.  
  8.   { Put a single character to the console device (the character's value is
  9.     received as an integer!) }
  10.   PROCEDURE out_char( c: integer );
  11.  
  12.     CONST
  13.       screen = 2;
  14.  
  15.     PROCEDURE bconout( device, c: integer );
  16.       BIOS(3);
  17.  
  18.     BEGIN
  19.       bconout( screen, c );
  20.     END;
  21.  
  22.   { Put a two-character escape sequence to the console device (an escape
  23.     followed by a single character) }
  24.   PROCEDURE out_escape( c: char );
  25.  
  26.     CONST
  27.       escape = 27;
  28.  
  29.     BEGIN
  30.       out_char( escape );
  31.       out_char( ord(c) );
  32.     END;
  33.  
  34.   { Clear from the cursor to the end of the current line }
  35.   PROCEDURE ClrEol;
  36.     BEGIN out_escape( 'K' ) END;
  37.  
  38.   { Clear the screen and move the cursor to the upper left position }
  39.   PROCEDURE ClrScr;
  40.     BEGIN out_escape( 'E' ) END;
  41.  
  42.   { Initialize the console device }
  43.   PROCEDURE CrtInit;
  44.     BEGIN out_escape( 'v' ) END;
  45.  
  46.   { Reset the console device }
  47.   PROCEDURE CrtExit;
  48.     BEGIN out_escape( 'w' ) END;
  49.  
  50.   { Delete the current line, moving all lines below up by one line }
  51.   PROCEDURE DelLine;
  52.     BEGIN out_escape( 'M' ) END;
  53.  
  54.   { Insert a blank line at the current position, moving the current line and
  55.     all lines below down by one line.  The bottom line on the screen is lost }
  56.   PROCEDURE InsLine;
  57.     BEGIN out_escape( 'L' ) END;
  58.  
  59.   { Move to a specific screen coordinate.  Home is (1,1). }
  60.   PROCEDURE GotoXY( x, y: integer );
  61.     BEGIN out_escape( 'Y' ); out_char( 31+x ); out_char( 31+y ) END;
  62.  
  63.   { Reverse foreground and background colors for text display }
  64.   PROCEDURE InverseVideo;
  65.     BEGIN out_escape( 'p' ) END;
  66.  
  67.   { Restore normal colors }
  68.   PROCEDURE NormVideo;
  69.     BEGIN out_escape( 'q' ) END;
  70.  
  71.   { Choose a foreground color index for text display }
  72.   PROCEDURE TextColor( color: integer );
  73.     BEGIN out_escape( 'b' ); out_char( color ) END;
  74.  
  75.   { Choose a background color index for text display }
  76.   PROCEDURE TextBackground( color: integer );
  77.     BEGIN out_escape( 'c' ); out_char( color ) END;
  78.  
  79. { ---------------------------------------------------------------------------
  80.   The following procedures and functions are not in the Turbo Pascal library:
  81.   --------------------------------------------------------------------------- }
  82.  
  83.   { Move the cursor up one line }
  84.   PROCEDURE CursUp;
  85.     BEGIN out_escape( 'A' ) END;
  86.  
  87.   { Move the cursor down one line }
  88.   PROCEDURE CursDown;
  89.     BEGIN out_escape( 'B' ) END;
  90.  
  91.   { Move the cursor right one column }
  92.   PROCEDURE CursRight;
  93.     BEGIN out_escape( 'C' ) END;
  94.  
  95.   { Move the cursor left one column }
  96.   PROCEDURE CursLeft;
  97.     BEGIN out_escape( 'D' ) END;
  98.  
  99.   { Move the cursor to the upper left corner of the screen }
  100.   PROCEDURE CursHome;
  101.     BEGIN out_escape( 'H' ) END;
  102.  
  103.   { Same as CursUp, but inserts a blank line at the top of the screen }
  104.   PROCEDURE CursUp2;
  105.     BEGIN out_escape( 'I' ) END;
  106.  
  107.   { Clear from cursor to end of the screen }
  108.   PROCEDURE ClrEos;
  109.     BEGIN out_escape( 'J' ) END;
  110.  
  111.   { Turn on the flashing cursor }
  112.   PROCEDURE CursOn;
  113.     BEGIN out_escape( 'e' ) END;
  114.  
  115.   { Turn off the flashing cursor (i.e., no cursor is displayed) }
  116.   PROCEDURE CursOff;
  117.     BEGIN out_escape( 'f' ) END;
  118.  
  119. {----------------------------------------------------------------- }
  120. {  The following procedures are added by Jinfu Chen                }
  121. {----------------------------------------------------------------- }
  122.   (* Clear from the top of screen to the cursor *)
  123.   PROCEDURE ClrToCurs;
  124.     BEGIN out_escape( 'd' ) END;
  125.  
  126.   (* Clear from the beginning of a line to the cursor, position
  127.      of the cursor remains unchanged *)
  128.   PROCEDURE ClrStart;
  129.     BEGIN out_escape( 'o' ) END;
  130.  
  131.   (* Clear the current line and leave remaining lines intact
  132.      and cursor will be in the beginning of the line *)
  133.   PROCEDURE ClrLine;
  134.     BEGIN out_escape( 'l' ) END;
  135.  
  136.   (* Save cursor position, to be used by next call *)
  137.   PROCEDURE SaveCurs;
  138.     BEGIN out_escape( 'j' ) END;
  139.  
  140.   (* Restore cursor *)
  141.   PROCEDURE ResCurs;
  142.     BEGIN out_escape( 'k' ) END;
  143.  
  144. { End of CURSOR.PAS }
  145.